/******************************************************************************
 * Copyright (C) 2013 - 2018 ShenZhen OnePlus Technology Co.,Ltd
 * All Rights Reserved.
 * 本软件为深圳万普拉斯科技有限公司开发研制。未经本公司正式书面同意，其他任何个人、团体不得使用、复制、修改或发布本软件.
 *****************************************************************************/
package com.data.reports.manager;

import com.data.reports.manager.database.DataSourceContextHolder;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * SQL配置动态代理<br/>
 * @author hujifang
 * @version V1.0
 * @Title: ConfigInvocationHandler.java
 * @Package com.data.reports.manager
 * @Description
 * @date 2018 03-22 15:58.
 */
public class ConfigInvocationHandler implements InvocationHandler{

    private Object target;

    public ConfigInvocationHandler(Object target){
        this.target=target;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        if (method.getAnnotation(DetermineDbCheck.class) == null){
            DataSourceContextHolder.setDbType(DataSourceContextHolder.DEFAULT);
        }
        return method.invoke(target,args);
    }

    /**
     * 获取目标对象的代理对象
     * @return 代理对象
     */
    @SuppressWarnings("unchecked")
    public <T> T getProxy() {
        return (T)Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(),
                target.getClass().getInterfaces(), this);
    }
}
